#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

void handler(int signo)
{
  cout << "get a signal: " << signo << endl;
  // exit(1);
  int n = alarm(5);
  cout << "上一个闹钟的剩余时间: " << n << endl;
}

int main()
{
  signal(SIGALRM, handler);
  alarm(500);
  while (true)
  {
    cout << "i am a process, i am running and happy" << endl;
    sleep(1);
  }

  return 0;
}

// int main()
// {
//   int a = 10;
//   int b = 0;
//   a /= b;

//   return 0;
// }

// void handler(int signo)
// {
//   cout << "get a signal: " << signo << endl;
//   // exit(1);
// }

// int main()
// {

//   pid_t id = fork();
//   if (id == 0)
//   {
//     // child
//     int cnt = 500;
//     while (true)
//     {
//       cout << "i am a child, pid: " << getpid() << "cnt: " << cnt << endl;
//       sleep(1);
//       cnt--;
//     }
//     exit(0);
//   }
//   // father
//   int status;
//   int rid = waitpid(id, &status, 0);
//   if (rid == id)
//   {
//     cout << "quit code: " << ((status >> 8) & 0xFF) << "quit signal: " << ((status) & 0x7F) << "core dump: " << ((status >> 7) & 1) << endl;
//   }

// signal(SIGSEGV, handler);
// int *p = nullptr;
// *p = 100; // 野指针错误

// signal(SIGFPE, handler);
// cout << "div before" << endl;
// int a = 10;
// int b = 0;

// a /= b;
// cout << "div after" << endl;

// return 0;
// }